package cn.cdeden.knowledge.utils;

import cn.cdeden.common.core.utils.MapstructUtils;
import cn.cdeden.knowledge.domain.EnterpriseConfig;
import cn.cdeden.knowledge.domain.dto.EnterpriseConfigDto;
import cn.cdeden.knowledge.enums.EnterpriseConfigEnums;
import cn.cdeden.knowledge.service.EnterpriseConfigService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

/**
 * TODO
 *
 * @author username
 * @date 2024/8/6 13:34
 * @describe:
 **/
@RequiredArgsConstructor
@Component
@Slf4j
public class EnterpriseConfigUtils {

    private final EnterpriseConfigService configService;

    public List<EnterpriseConfigDto> getEnterpriseConfigInfos() {
        checkEnterpriseConfigInfos();
        //先查找数据库
        List<EnterpriseConfig> list = configService.list();
        EnterpriseConfigEnums[] values = EnterpriseConfigEnums.values();
        List<EnterpriseConfigDto> enterpriseConfigDtos = new ArrayList<>();
        if (list.size() == 0){
            //不存在则查找枚举
            for (EnterpriseConfigEnums value : values) {
                enterpriseConfigDtos.add(EnterpriseConfigEnums.getEnterpriseConfigDto(value.getConfigCode()));
            }
            //并且存入数据
            configService.saveBatch(MapstructUtils.convert(enterpriseConfigDtos, EnterpriseConfig.class));
        }else return MapstructUtils.convert(list, EnterpriseConfigDto.class);
        return enterpriseConfigDtos;
    }

    private void checkEnterpriseConfigInfos() {
        EnterpriseConfigEnums[] values = EnterpriseConfigEnums.values();
        for (EnterpriseConfigEnums value : values) {
            EnterpriseConfig byId = configService.getById(value.getConfigCode());
            if (byId == null) {
                EnterpriseConfigDto enterpriseConfigDto = EnterpriseConfigEnums.getEnterpriseConfigDto(value.getConfigCode());
                configService.insert(enterpriseConfigDto);
            }
        }
    }
    public EnterpriseConfigDto getEnterpriseConfigInfoByCode(String configCode) {
        //先查找数据库
        EnterpriseConfig byId = configService.getById(configCode);
        EnterpriseConfigDto enterpriseConfigDto = new EnterpriseConfigDto();
        if (byId == null){
            //不存在则查找枚举
            enterpriseConfigDto = EnterpriseConfigEnums.getEnterpriseConfigDto(configCode);
            if (enterpriseConfigDto == null)return null;
            else configService.insert(enterpriseConfigDto);
        }else {
            enterpriseConfigDto = MapstructUtils.convert(byId, EnterpriseConfigDto.class);
        }
        //并且存入数据
        return enterpriseConfigDto;
    }
}
